using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.Look.Imagem.Entidades;

namespace MakeIT.Look.Imagem.Negocios
{
	public partial class LookDAOT : DAOT
	{

		public EstaticoVO getEstatico(int? idEstatico, string nome)
		{
			EstaticoVO estaticoVO = null;
			List<EstaticoVO> listEstaticoVOs = getEstaticos(idEstatico, nome);
			if (listEstaticoVOs != null && listEstaticoVOs.Count > 0)
			{
				estaticoVO = listEstaticoVOs[0];
			}
			return estaticoVO;
		}

		public EstaticoVO getEstatico(int? idEstatico)
		{
			return getEstatico(idEstatico, null);
		}

		public List<EstaticoVO> getEstaticos()
		{
			return getEstaticos(null, null);
		}

		public List<EstaticoVO> getEstaticos(int? idEstatico)
		{
			return getEstaticos(idEstatico, null);
		}

		public List<EstaticoVO> getEstaticos(int? idEstatico, string nome)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT est.idEstatico as est_idEstatico, est.nome as est_nome, est.conteudoPro as est_conteudoPro, est.conteudoEdi as est_conteudoEdi, est.cadastro as est_cadastro, est.cadastradoPor as est_cadastradoPor, est.edicao as est_edicao, est.editadoPor as est_editadoPor  ");
			query.AppendLine("FROM estatico as est ");
			if (idEstatico != null)
			{
				query.AppendLine(where + "est.idEstatico=@idEstatico ");
				where = "AND ";
			}
			if (nome != null)
			{
				query.AppendLine(where + "est.nome LIKE @nome ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY est.nome ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idEstatico!= null) cmd.Parameters.Add(getParameter(cmd, "@idEstatico", idEstatico));
			if (nome!= null) cmd.Parameters.Add(getParameter(cmd, "@nome", "%"+nome+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<EstaticoVO> listEstatico = new List<EstaticoVO>();

				while (reader.Read())
				{
					EstaticoVO estaticoVO = EstaticoVO.CreateVO();
					estaticoVO.idEstatico = reader.GetInt32(reader.GetOrdinal("est_idEstatico"));
					estaticoVO.nome = reader.GetString(reader.GetOrdinal("est_nome"));
					if (!reader.IsDBNull(reader.GetOrdinal("est_conteudoPro")))
						estaticoVO.conteudoPro = reader.GetString(reader.GetOrdinal("est_conteudoPro"));
					if (!reader.IsDBNull(reader.GetOrdinal("est_conteudoEdi")))
						estaticoVO.conteudoEdi = reader.GetString(reader.GetOrdinal("est_conteudoEdi"));
					estaticoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("est_cadastro"));
					estaticoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("est_cadastradoPor"));
					estaticoVO.edicao = reader.GetDateTime(reader.GetOrdinal("est_edicao"));
					estaticoVO.editadoPor = reader.GetString(reader.GetOrdinal("est_editadoPor"));


					listEstatico.Add(estaticoVO);
				}
				reader.Close();
				return listEstatico;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setEstatico(EstaticoVO estaticoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE estatico ");
			query.AppendLine("SET nome=@nome, conteudoPro=@conteudoPro, conteudoEdi=@conteudoEdi,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idEstatico=@idEstatico ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstatico", estaticoVO.idEstatico));
			cmd.Parameters.Add(getParameter(cmd, "@nome", estaticoVO.nome));
			if (estaticoVO.conteudoPro == null)
				cmd.Parameters.Add(getParameter(cmd, "@conteudoPro", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@conteudoPro", estaticoVO.conteudoPro));
			if (estaticoVO.conteudoEdi == null)
				cmd.Parameters.Add(getParameter(cmd, "@conteudoEdi", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@conteudoEdi", estaticoVO.conteudoEdi));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", estaticoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", estaticoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", estaticoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", estaticoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newEstatico(EstaticoVO estaticoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO estatico ");
			query.AppendLine("  ( nome, conteudoPro, conteudoEdi, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @nome, @conteudoPro, @conteudoEdi, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@nome", estaticoVO.nome));
			if (estaticoVO.conteudoPro == null)
				cmd.Parameters.Add(getParameter(cmd, "@conteudoPro", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@conteudoPro", estaticoVO.conteudoPro));
			if (estaticoVO.conteudoEdi == null)
				cmd.Parameters.Add(getParameter(cmd, "@conteudoEdi", System.DBNull.Value));
			else
				cmd.Parameters.Add(getParameter(cmd, "@conteudoEdi", estaticoVO.conteudoEdi));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", estaticoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", estaticoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", estaticoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", estaticoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('estatico') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delEstatico(EstaticoVO estaticoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM estatico ");
			query.AppendLine("WHERE idEstatico=@idEstatico ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstatico", estaticoVO.idEstatico));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
	}
}
